package com.example.springredis;

import com.sun.glass.ui.Size;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.redis.connection.RedisConnection;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.data.redis.core.ZSetOperations;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;


import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Set;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: lishuo
 * Date: 2023-12-17
 * Time: 11:23
 */
@RestController
public class RedisController {
    // spring 提供最原始的类是 RedisTemplate ,此处的
    // StringRedisTemple 是其子类，专门用来处理文本数据的。
    @Resource
    private RedisTemplate<String,Object> redisTemplate;

//    @GetMapping("/teststring")
//    public String testString() {
//        redisTemplate.opsForValue().set("key1", "111");
//        HashMap<String, String> map = new HashMap<>();
//        map.put("key2", "李华");
//        map.put("key3", "333");
//        redisTemplate.opsForValue().multiSet(map);
//
////        redisTemplate.opsForValue().increment("key1",111);
//
//        String key2 = redisTemplate.opsForValue().get("key2");
//        System.out.println("key2 = " + key2);
//
//        return "ok";
//    }
//
//    @GetMapping("/testlist")
//    public String testList() {
//        // 清除数据
//        redisTemplate.execute((RedisConnection connection) -> {
//            connection.flushAll();
//            return null;
//        });
//        redisTemplate.opsForList().leftPush("key1", "111");
//        redisTemplate.opsForList().leftPush("key1", "222");
//        redisTemplate.opsForList().leftPush("key1", "333");
//
//        String val1 = redisTemplate.opsForList().leftPop("key1");
//        System.out.println("val1 = " + val1);
//
//        String val2 = redisTemplate.opsForList().leftPop("key1");
//        System.out.println("val2 = " + val2);
//
//        String val3 = redisTemplate.opsForList().leftPop("key1");
//        System.out.println("val3 = " + val3);
//
//        String val4 = redisTemplate.opsForList().leftPop("key1");
//        System.out.println("val4 = " + val4);
//
//        return "ok";
//    }
//
//    @GetMapping("/testset")
//    public String testSet() {
//        // 清除数据
//        redisTemplate.execute((RedisConnection connection) -> {
//            connection.flushAll();
//            return null;
//        });
//
//        redisTemplate.opsForSet().add("key1", "111", "222", "333");
//        Set<String> members = redisTemplate.opsForSet().members("key1");
//        System.out.println("members = " + members);
//
//        Long size = redisTemplate.opsForSet().size("key1");
//        System.out.println("size = " + size);
//
//        Long n = redisTemplate.opsForSet().remove("key1", "111", "222");
//        System.out.println("n = " + n);
//
//        Set<String> members2 = redisTemplate.opsForSet().members("key1");
//        System.out.println("members2 = " + members2);
//        return "OK";
//    }

    @GetMapping("/testhash")
    public String testHash() {
        // 清除数据
//        redisTemplate.execute((RedisConnection connection) -> {
//            connection.flushAll();
//            return null;
//        });
        Object u_id = redisTemplate.opsForHash().get("articles:10", "u_avatarUrl");
        System.out.println(u_id);
//        redisTemplate.opsForHash().put("key1", "f1", "111");
//        redisTemplate.opsForHash().put("key1", "f2", "222");
//        redisTemplate.opsForHash().put("key1", "f3", "333");
//        redisTemplate.opsForHash().put("key1", "f4", "444");
//
//        Set<Object> keys = redisTemplate.opsForHash().keys("key1");
//        System.out.println("keys = " + keys);
//
//        List<Object> vals = redisTemplate.opsForHash().values("key1");
//        System.out.println("vals = " + vals);
//
//        String res = (String) redisTemplate.opsForHash().get("key1", "f2");
//        System.out.println("res = " + res);
//
//        Boolean isExist = redisTemplate.opsForHash().hasKey("key1", "f4");
//        System.out.println("isExist = " + isExist);
//
//        Long delete = redisTemplate.opsForHash().delete("key1", "f1");
//        System.out.println("delete = " + delete);

        return "ok";
    }

//    @GetMapping("/testzset")
//    public String testZset() {
//        // 清除数据
//        redisTemplate.execute((RedisConnection connection) -> {
//            connection.flushAll();
//            return null;
//        });
//
//        redisTemplate.opsForZSet().add("key1","zhangsan",80.8);
//        redisTemplate.opsForZSet().add("key1","lisi",90.8);
//        redisTemplate.opsForZSet().add("key1","wangwu",100.8);
//
//        Set<String> range = redisTemplate.opsForZSet().range("key1", 0, -1);
//        System.out.println("range = "+range);
//
//        Set<ZSetOperations.TypedTuple<String>> rangeWithScores =
//                redisTemplate.opsForZSet().rangeWithScores("key1", 0, -1);
//        System.out.println("rangeWithScores = "+rangeWithScores);
//
//        Double score = redisTemplate.opsForZSet().score("key1", "zhangsan");
//        System.out.println("socre = "+score);
//
//        Long n = redisTemplate.opsForZSet().size("key1");
//        System.out.println("n = "+ n);
//
//        Long rank = redisTemplate.opsForZSet().rank("key1", "wangwu");
//        System.out.println("rank = "+rank);
//
//        // go on
//
//        return "OK";
//    }
}
